<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "../DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Unique Factorization Domain package</title>
  </head>

  <body>
    <h1>Unique factorization domain package.</h1>

<p>
  This package contains classes for polynomials rings as unique
  factorization domains.  Provided methods with interface
  <code>GreatestCommonDivisor</code> are e.g. greatest common divisors
  <code>gcd()</code>, primitive part <code>primitivePart()</code> or
  <code>coPrime()</code>.  The different classes implement variants of
  polynomial remainder sequences (PRS) and modular methods.  Interface
  <code>Squarefree</code> provides the greatest squarefree factor
  <code>squarefreeFactor()</code> and a complete squarefree
  decompostion can be obtained with method
  <code>squarefreeFactors()</code>.  There is a
  <code>Factorization</code> interface with an
  <code>FactorAbstract</code> class with common codes.  Factorization
  of univariate polynomials exists for several coefficient rings:
  modulo primes in class <code>FactorModular</code>, over integers in
  class <code>FactorInteger</code>, over rational numbers in class
  <code>FactorRational</code>, over algebraic numbers in class
  <code>FactorAlgebraic&lt;C&gt;</code> and over rational functions in
  class <code>FactorQuotient&lt;C&gt;</code> (where for the last two
  classes <code>C</code> can be any other ring for which the
  <code>FactorFactory. getImplementation</code> returns an
  implementation).  Multivatiate polynomials over the integers (and
  rational numbers) are factored using the algorithm of P. Wang. For
  other coeffcients the multivatiate polynomials are reduced to
  univariate polynomials via Kronecker substitution.  <!-- and are
  therefore not very efficient at the moment. The factorization of
  polynomials is partly experimental.--> The rational function class
  <code>Quotient</code> computes quotients of polynomials reduced to
  lowest terms.
</p>
<p>
  To choose the correct implementation always use the factory classes
  <code>GCDFactory</code>, <code>SquarefreeFactory</code> and
  <code>FactorFactory</code> with methods
  <code>getImplementation()</code> or <code>getProxy()</code>.  These
  methods will take care of all possible (implemented) coefficient
  rings properties.  The polynomial coefficients must implement the
  <code>GcdRingElem</code> interface and so must allow greatest common
  divisor computations.  Greatest common divisor computation is
  completely generic and works for any implemented integral domain.
  If special, optimized implementations exist they will be used.
  Squarefree decomposition is also completely generic and works for
  any implemented integral domain. There are no special, optimized
  implementations.  Factorization is generic relative to the
  implemented ring constructions: algebraic field extensions and
  transcendent field extensions. Implemented base cases are modular
  coefficient, integer coefficients and rational number coefficients.
</p>
<p>
  The implementation follows 
  Geddes &amp; Czapor &amp; Labahn <em>Algorithms for Computer Algebra</em>
  and Cohen <em>A Curse in Computational Algebraic Number Theory</em>.
  See also Kaltofen <em>Factorization of Polynomials</em> in Computing Supplement, 
  <em>Springer, 1982</em>,
  Davenport &amp; Gianni &amp; Trager <em>Scratchpad's View of Algebra II: A Categorical View of Factorization</em>
  in <em>ISSAC'91</em>
  and the <a href="http://krum.rz.uni-mannheim.de/mas/src/" target="mas.src">ALDES/SAC2 code</a>
  as contained in <a href="http://krum.rz.uni-mannheim.de/mas/" target="mas">MAS</a>.
</p>

    <hr />
    <address><a href="mailto:kredel at rz.uni-mannheim.de">Heinz Kredel</a></address>
<p>
<!-- Created: Sun Mar  4 16:46:52 CET 2007 -->
<!-- hhmts start -->
Last modified: Fri Sep 21 21:56:48 CEST 2012
<!-- hhmts end -->
</p>
<p>$Id$ 
</p>
  </body>
</html>
